flag_frozen: bool,
flag_locked: bool,
- arg_crate: Option<String>,
+ arg_crate: Vec<String>,
flag_vers: Option<String>,
flag_git: Option<String>,
Install a Rust binary
Usage:
- cargo install [options] [<crate>]
+ cargo install [options] [<crate>...]
cargo install [options] --list
Specifying what crate to install:
SourceId::for_git(&url, gitref)
} else if let Some(path) = options.flag_path {
SourceId::for_path(&config.cwd().join(path))?
- } else if options.arg_crate == None {
+ } else if options.arg_crate.is_empty() {
SourceId::for_path(&config.cwd())?
} else {
SourceId::crates_io(config)?
};
- let krate = options.arg_crate.as_ref().map(|s| &s[..]);
+ let krates = options.arg_crate.iter().map(|s| &s[..]).collect::<Vec<_>>();
let vers = options.flag_vers.as_ref().map(|s| &s[..]);
let root = options.flag_root.as_ref().map(|s| &s[..]);
if options.flag_list {
ops::install_list(root, config)?;
} else {
- ops::install(root, krate, &source, vers, &compile_opts, options.flag_force)?;
+ ops::install(root, krates, &source, vers, &compile_opts, options.flag_force)?;
}
Ok(())
}
}
#[test]
-fn pick_max_version() {
+test!(multiple_pkgs {
+ pkg("foo", "0.0.1");
+ pkg("bar", "0.0.1");
+
+ assert_that(cargo_process("install").arg("foo").arg("bar"),
+ execs().with_status(0).with_stdout(&format!("\
+{updating} registry `[..]`
+{downloading} foo v0.0.1 (registry file://[..])
+{compiling} foo v0.0.1 (registry file://[..])
+{installing} {home}[..]bin[..]foo[..]
+{downloading} bar v0.0.1 (registry file://[..])
+{compiling} bar v0.0.1 (registry file://[..])
+{installing} {home}[..]bin[..]bar[..]
+",
+ updating = UPDATING,
+ downloading = DOWNLOADING,
+ compiling = COMPILING,
+ installing = INSTALLING,
+ home = cargo_home().display())));
+ assert_that(cargo_home(), has_installed_exe("foo"));
+ assert_that(cargo_home(), has_installed_exe("bar"));
+
+ assert_that(cargo_process("uninstall").arg("foo"),
+ execs().with_status(0).with_stdout(&format!("\
+{removing} {home}[..]bin[..]foo[..]
+",
+ removing = REMOVING,
+ home = cargo_home().display())));
+ assert_that(cargo_process("uninstall").arg("bar"),
+ execs().with_status(0).with_stdout(&format!("\
+{removing} {home}[..]bin[..]bar[..]
+",
+ removing = REMOVING,
+ home = cargo_home().display())));
+ assert_that(cargo_home(), is_not(has_installed_exe("foo")));
+ assert_that(cargo_home(), is_not(has_installed_exe("bar")));
+});
+
+test!(pick_max_version {
pkg("foo", "0.0.1");
pkg("foo", "0.0.2");